// 顶部：仅类型导入 + 拆分 logger 的值/类型导入
import Logger from "../../logger";
import type { ILogger } from "../../logger";
import { LoggerLevel } from "../../logger";
import type { IUtilsValidation } from "./validation";

export type { IUtilsValidation };

/**
 * 工具 validation
 */
class UtilsValidation implements IUtilsValidation {
    private logger: ILogger;

    constructor(level?: LoggerLevel) {
        this.logger = new Logger('UtilsValidation', level);
    }

    /**
     * 验证邮箱
     * @param email 邮箱地址
     * @returns 如果是有效邮箱返回 true，否则返回 false
     */
    isEmail(email: string): boolean {
        const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
        return emailRegex.test(email);
    }

    /**
     * 验证手机号
     * @param phone 手机号
     * @returns 如果是有效手机号返回 true，否则返回 false
     */
    isPhoneNumber(phone: string): boolean {
        const phoneRegex = /^1[3-9]\d{9}$/;
        return phoneRegex.test(phone);
    }

    /**
     * 验证身份证号
     * @param idCard 身份证号
     * @returns 如果是有效身份证号返回 true，否则返回 false
     */
    isIdCard(idCard: string): boolean {
        const idCardRegex = /(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/;
        return idCardRegex.test(idCard);
    }

    /**
     * 验证密码强度
     * @param password 密码
     * @returns 如果是强密码返回 true，否则返回 false
     */
    isStrongPassword(password: string): boolean {
        // 至少8位，包含大小写字母、数字和特殊字符
        const strongPasswordRegex = /^(?=.*[a-z])(?=.*[A-Z])(?=.*\d)(?=.*[@$!%*?&])[A-Za-z\d@$!%*?&]{8,}$/;
        return strongPasswordRegex.test(password);
    }

    /**
     * 验证URL
     * @param url URL地址
     * @returns 如果是有效URL返回 true，否则返回 false
     */
    isURL(url: string): boolean {
        const urlRegex = /^(https?|ftp):\/\/[^\s/$.?#].[^\s]*$/i;
        return urlRegex.test(url);
    }
}

export default new UtilsValidation() as IUtilsValidation;